package com.sojson.util.mail.interfaces.impl;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import com.sojson.constant.ConstantServlet;

import lombok.extern.slf4j.Slf4j;

/**
 * 发送邮件工具类
 * 
 * @author Liu
 *
 */
@Slf4j
@Component
public class MailSends {

    /**
     * 以异步的方式发送一封邮件
     * 
     * @param from 发件人电子邮箱
     * @param target 目标邮箱
     * @param title 邮件标题
     * @param content 内容
     * @param count 第几封邮件，如果只发一封就传null
     * @param session
     */
    @Async
    public void run(String from, String target, String title, String content, Integer count, Session session) {
        try {
            // 1.创建连接对象javax.mail.Session
            // 2.创建邮件对象 javax.mail.Message
            // 3.发送一封激活邮件
            // 2.创建邮件对象
            Message message = new MimeMessage(session);
            // 2.1设置发件人
            message.setFrom(new InternetAddress(from));
            // 2.2设置接收人
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(target));
            // 2.3设置邮件主题
            message.setSubject(title);
            // 2.4设置邮件内容
            // String content =
            // "<html><head></head><body><h1>你好，仓库的SN为:的物料已缺料，请尽快补料！需要补料，请尽快补料！</href></h3></body></html>";
            message.setContent(content, ConstantServlet.CONTENT_TYPE_TEXT_HTML_UTF_8);
            // 3.发送邮件
            Transport.send(message);
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            StringBuffer str = new StringBuffer("");
            if (count != null) {
                str.append("第");
                str.append(count);
                str.append("封");
            }
            str.append("邮件发送失败！目标邮箱为:");
            str.append(target);
            str.append("。");
            str.append(e.getMessage());
            log.error(str.toString());
        }
    }

}